import Data.List
import Data.Maybe
import System.Directory
import Data.Time.Clock
import Data.Time.Calendar
 
date :: IO (Integer,Int,Int) -- :: (year,month,day)
date = getCurrentTime >>= return . toGregorian . utctDay

formatDate :: (Integer, Int, Int) -> String
formatDate (x, y, z) = concat $ intersperse "_" $ show z : show y : show x : []

carregarArquivo :: FilePath -> IO String
carregarArquivo = readFile

criarArquivo :: FilePath -> IO [String] -> IO String
criarArquivo arquivo conteudo = do
    c <- conteudo
    let c' = unlines c
    writeFile arquivo c'
    carregarArquivo arquivo

criarOuCarregarArquivo :: FilePath -> IO [String] -> IO String
criarOuCarregarArquivo arquivo conteudo = do
    existe <- doesFileExist arquivo
    if existe 
       then carregarArquivo arquivo 
       else criarArquivo arquivo conteudo
              
getModulos :: FilePath -> IO String
getModulos dir = criarOuCarregarArquivo arquivo modulos
    where arquivo = dir ++ "\\modulos.txt"
          modulos = return ["Teste1", "Teste2"]

getConfiguracoes :: FilePath -> IO String
getConfiguracoes dir = criarOuCarregarArquivo arquivo configuracoes
    where arquivo = dir ++ "\\configurações.txt"
          configuracoes = do
              putStr "Digite seu nome: "
              n <- getLine
              return ["Nome=" ++ n, "Programa=C:\\Windows\\notepad.exe"]
            
enumerarModulos :: Int -> [String] -> [String]
enumerarModulos _ [] = []
enumerarModulos n (x:xs) = n' : enumerarModulos (n+1) xs
    where n' = show n ++ " - " ++ x
    
   
    
main = do
    dir <- getAppUserDataDirectory "novo-script"
    createDirectoryIfMissing True dir    
    m <- getModulos dir
    c <- getConfiguracoes dir
    let modulos = lines m
        modulosEnum = enumerarModulos 0 modulos
        configuracoes = lines c
    putStrLn "Escolha o módulo:"
    mapM putStrLn modulosEnum
    indiceModulo <- getLine
    let modulo = modulos !! (read indiceModulo)
    print modulo
